import { defineStore } from 'pinia'
import { login, getUserInfo, refreshToken } from '@/api/common'
import storage from '@/utils/storage'
import router from '@/router'

export const useUserStore = defineStore('user', {
  state() {
    return {
      // 用户的token
      token: storage.get('token') || '',
      // 用户的基本信息
      info: null as IInfo | null
    }
  },

  actions: {
    // 设置token
    setToken(data: any, isRefresh: boolean) {
      storage.set('token', data.token, data.expire)

      if (!isRefresh) {
        storage.set('refreshToken', data.refreshToken, data.refreshExpire)
      }
    },

    // 登录
    async login(payload: any) {
      // 1. 调用登录接口
      const resp = await login(payload)
      // 2. 将 token 写入 state
      this.token = resp.data.token
      // 3. 将 token 写入 本地存储
      // localStorage.setItem('token', resp.data.token)
      this.setToken(resp.data, false)
      // 4. 获取用户信息
      const resp1 = await getUserInfo()
      // 5. 将 用户信息 写入 state
      this.info = resp1.data
      // OK了。
    },

    // 刷新token
    async refreshToken() {
      const resp = await refreshToken(storage.get('refreshToken'))
      return resp
    },

    // 退出登录
    logout() {
      storage.clearAll()
      this.token = ''
      this.info = null
      router.replace('/login')
    }
  }
})
